#include  <cstdio>

int n,b,k;
int a[260][260];
int _min[260][260][8],_max[260][260][8];

int max(int x, int y)
{
	return x > y ? x : y;
}

int min(int x, int y)
{
	return x < y ? x : y;
}

void init()
{
	for( int i = 0; i < 260 ; ++i )
		for(int j = 0; j < 260; ++j)
			for( int m = 0; m < 8 ; ++m )
			{
				_max[i][j][m] = -1;
				_min[i][j][m] = -1;
			}
}

int get_min(int x, int y)
{
	int getm(int);
	int res = 251;
	int m = getm(b);

	for( int i = x; i < x+b  ; ++i )
		res = min(res,min(_min[i][y][m],_min[i][y + b - (1 <<  m)][m]));	
	
	return res;
}

int get_max(int x, int y)
{
	int getm(int);
	int res = -1;
	int m = getm(b);

	for( int i = x; i < x+b  ; ++i )
		res = max(res,max(_max[i][y][m],_max[i][y + b - (1 <<  m)][m]));	
	return res;
}

int getm(int x)
{
	int sum = 0;
	while(x >>= 1 != 0) sum++;
	return sum;
}

void search(int i, int j, int m)
{
	if( _max[i][j][m] != -1)
		return;
	if( m == 0)
	{
		_max[i][j][m] = _min[i][j][m] = a[i][j];
		return;
	}

	search(i,j,m-1);
	search(i,j + (1 << (m-1) ), m-1);
	_max[i][j][m] = max( _max[i][j][m-1], _max[i][j+(1 << (m-1)) ][m-1] );
    _min[i][j][m] = min( _min[i][j][m-1], _min[i][j+(1 << (m-1)) ][m-1] );
	return;
}

void process()
{
	for( int i = 1; i <= n ; ++i )
	{
		int m = getm(n);
		for( int j = 1; j <=n ; ++j )
		{
			if(j + (1 << m) -1 > n)
				m--;
			search(i,j,m);
		}
	}
}

int main(int argc, char *argv[])
{
	init();
	scanf("%d%d%d",&n,&b,&k);
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= n; ++j)
			scanf("%d",&a[i][j]);

	process();
	int x,y;
	for( int i = 0; i < k ; ++i )
	{
		scanf("%d%d",&x,&y);
		printf("%d\n",get_max(x,y) - get_min(x,y));
	}
}
